package util

import (
	"crypto/sha1"
	"encoding/hex"
	"encoding/json"

	"go.uber.org/zap"
)

type PortalData struct {
	PortalCode               string `json:"portal_code"`                // 门架编号
	SnapTime                 string `json:"snap_time"`                  // yyyyMMddHHmmssSSS
	LicensePlateNumber       string `json:"license_plate_number"`       // 车牌前车牌号码，不含颜色，无车牌时，默认"A00000"
	LicensePlateNumber2      string `json:"license_plate_number2"`      // 车牌后车牌号码，不含颜色，无车牌时，默认"A00000"
	LicensePlateColor        string `json:"license_plate_color"`        // 前车牌颜色
	LicensePlateColor2       string `json:"license_plate_color2"`       // 后车牌颜色
	VehicleColor             string `json:"vehicle_color"`              // 车辆颜色
	VehicleModel             string `json:"vehicle_model"`              // 车辆类型
	LaneNumber               string `json:"lane_number"`                // 车道号: 由行驶方向，内侧向外侧顺序递增，跨多车道时，采用组合编码。1（车道1）123(同时覆盖123车道)
	SnapNumber               string `json:"snap_number"`                // 抓拍序号，批次内序
	DangerousChemicalsSymols string `json:"dangerous_chemicals_symols"` // 危险品字符，0-未知，1-危险品，2-非危险品
	DangerousChemicalsType   string `json:"dangerous_chemicals_type"`   // 危险品类型，包括爆炸品，易燃品，高热物质，毒性物质，腐蚀性物质，放射性物质，非易燃无毒气体，氧化剂，杂项，用多个逗号隔开。
	AxleType                 string `json:"axle_type"`                  // 车辆轴型 BCDE四轴型
	AxleNumber               string `json:"axle_number"`                // 车辆轴数
	WheelNumber              string `json:"wheel_number"`               // 车轮总数
	VehicleSpeed             string `json:"vehicle_speed"`              // 车速，单位：km/h
	VehicleLength            string `json:"vehicle_length"`             // 车身长度，单位: 厘米
	TrafficVehicleModel      string `json:"traffic_vehicle_model"`      // 交调车型，按照I级SE车型的要求输出，包括中小客车、大客车、小型货车、中型货车、大型货车、特大型货车、集装箱车、摩托车、拖拉机
	ImgExist                 string `json:"img_exist"`                  // 五位字符串依次表示前拍、后拍、侧拍、车牌和随机图片的信息,0-存在，1-缺失
	BeforeCompress           string `json:"before_compress"`            // 压缩前大小
	AfterCompress            string `json:"after_compress"`             // 压缩后大小
	VehicleWidth             string `json:"vehicle_width"`              // 车宽，单位：厘米
	VehicleHeight            string `json:"vehicle_height"`             // 车高，单位：厘米
	ImageType                string `json:"image_type"`                 // 融合图片类型，图片格式:jpg,png
	ImageUrl                 string `json:"image_url"`                  // URL地址信息
	RecordId                 string `json:"record_id"`                  // 流水号
	// 这个应该是上链之后才有的
	// BlockChainHashCode       string `form:"block_chain_hash_code" json:"block_chain_hash_code" binding:"required"` // 区块链Hash值
	ProvinceCode         string `json:"province_code"`           // 数据源原始省份代码, 按照国家标准编码 例如：贵州44
	BelongVideoUrl       string `json:"belong_video_url"`        // 融合图片关联的视频文件的文件Url信息
	BelongVideoStartTime string `json:"belong_video_start_time"` // 关联的视频文件文件开始时间,精确到秒,20231031103031 代表2023年10月31日 10:30:31
	BelongVideoEndTime   string `json:"belong_video_end_time"`   // 关联的视频文件文件结束时间,精确到秒,20231031103031 代表2023年10月31日 10:30:31
}

// GeneratePortalRecordEnvidence 生成envidence 哈希的值
func GeneratePortalRecordEnvidence(createPortalProverReq *PortalData) (hashText string, err error) {
	portalDataBytes, err := json.Marshal(createPortalProverReq)
	if err != nil {
		return "", err
	}
	ins := sha1.New()
	ins.Write(portalDataBytes)
	result := hex.EncodeToString(ins.Sum(nil))
	zap.L().Debug(result)
	return result, nil
}
